/* 组合计数
    递推法，隔板法，乘法原理，加法原理，组合数，排列数，Lucas，Catalan数列

* 1.求组合数
    (1)递推 O(n^2) C(a,b) = C(a-1,b) + C(a-1,b-1)
    int c[N][N];
    void init()
    {
        for(int i = 0;i < N;i ++)
            for(int j = 0;j <= i;j ++)
                if(!j) c[i][j] = 1;
                else c[i][j] = c[i-1][j] + c[i-1][j-1] % mod;
    }

    (2)乘法逆元
    费马小定理 : 假如p是质数，且 gcd(a,p)=1，那么 a^(p−1)≡1 (mod p)
                所以 a∗a^(p−2)≡1 (mod p)
                得出 : a^(p−2)就是 a 的乘法逆元
                乘法逆元 == qpow(x,p−2)
    int fact[N],infact[N]; //阶乘， 阶乘逆元
    fact[0] = infact[0] = 1;
    for(int i = 1; i < N; i ++)
    {
        fact[i] = (LL)fact[i - 1] * i % mod;
        infact[i] = (LL)infact[i - 1] * qmi(i,mod - 2, mod) % mod;
    }

    (3)卢卡斯(Lucas)定理 空间O(MOD) 时间O(logMOD(n))
        C(a,b) = C(a%MOD, b%MOD) * C(a/MOD, b/MOD)
        int MOD;
        int C(LL a,LL b)
        {
            if(b > a) return 0;

            int res = 1;
            for(int i = 1,j = a;i <= b;i ++, j --)
            {
                res = res * j % MOD;
                res = res * qmi(j,MOD-2) % MOD;
            }

            return res;
        }

        int lucas(LL a,LL b)
        {
            if(a < MOD && b < MOD) return C(a,b);
            return (LL)C(a%MOD,b%MOD) * lucas(a/MOD,b/MOD) % MOD;
        }
    (4)高精度计算
        void add(int c[], int a[], int b[]) //c=a+b 高精度加法
        {
            for(int i = 0, t = 0; i < N; i++)
            {
                t += a[i] + b[i];
                c[i] = t % 10;
                t /= 10;
            }
        }
        for(int i = 0; i < n; i++) //上标i
            for(int j = 0; j <= i && j < k; j++) //下标j
                if(!j) f[i][j][0] = 1; //C(i,0) = 1
                else add(f[i][j], f[i-1][j], f[i-1][j-1]); //f[i][j] = f[i-1][j] + f[i-1][j-1];
                //C(i, j) = C(i - 1, j) + C(i - 1, j - 1)
    (5)Calatan    
    将问题转换为 路径问题：0 为向右，1 为向上，走到(n,n) 的位置
    每一个排列对应着一种路径；

    证明思路：任何一条从(0,0)到(n,n)的经过 x > y 这条线的路径都能通过轴对称，变成一条
    从(0,0)到(n+1,n-1)的路径 ，则这两种方案数相等（从第一次相交的点做轴对称）
    结果便是总的方案数 C(2n,n) - C(2n,n-1);

    res = C(2n,n) - C(2n,n-1) = C(2n,n) / n + 1;(利用定义化简) 

* 本题:
    切分为上下两个矩形, 上半部分放i辆车, 下半部分放k-i辆车
    组合数C(a, b) = a! / ((a - b)! * b!)，排列数P(a, b) = a! / (a - b)!
    上半部分 = C(b,i)*P(a,i)
    下半部分 = C(d,k-i)*P(a+c-i,k-i)

*/

#define DEBUG
#pragma GCC optimize("O1,O2,O3,Ofast")
#pragma GCC optimize("no-stack-protector,unroll-loops,fast-math,inline")
#pragma GCC target("avx,avx2,fma")
#pragma GCC target("sse,sse2,sse3,sse4,sse4.1,sse4.2,ssse3")

#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;
#define int long long
const int N = 2010, MOD = 100003;
int a, b, c, d, k;
int fact[N], infact[N]; //阶乘，阶乘逆元

int qmi(int base, int index, int MOD)
{
    int res = 1;
    while(index)
    {
        if(index & 1) res = (res * base) % MOD;
        base = (base * base) % MOD;
        index >>= 1;
    }
    return res;
}

//组合数
int C(int a, int b)
{
    if(a < b) return 0;
    return fact[a]*infact[a-b]*infact[b]%MOD;
}

//排列数
int P(int a, int b)
{
    if(a < b) return 0;
    return fact[a]*infact[a-b]%MOD;
}

signed main()
{
    #ifdef DEBUG
        freopen("./in.txt", "r", stdin);
    #else
        ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    #endif

    //阶乘预处理
    fact[0] = infact[0] = 1;
    for(int i = 1; i < N; i ++)
    {
        fact[i] = fact[i - 1] * i % MOD;
        infact[i] = infact[i - 1] * qmi(i,MOD - 2, MOD) % MOD;
    }

    cin >> a >> b >> c >> d >> k;

    int res = 0;
    for(int i = 0; i <= k; i++){
        res = (res + C(b,i)*P(a,i)%MOD *C(d,k-i)*P(a+c-i,k-i)) % MOD;
    } 
    cout << res << endl;
    return 0;
}
